/**
 * 467.环绕字符串中唯一的子字符串
 */
public class Exerciser8 {
    public int findSubstringInWraproundString(String s) {
        // dp[i]表示: 以i位置结尾的所有子字符串里面，有多少个在base中出现 (个数)
        char[] ss = s.toCharArray();
        int n = s.length();
        int[] dp = new int[n];
        // 初始化
        // 每一个字符都是一个子字符串
        for(int i = 0;i < n;i++) {
            dp[i] = 1;
        }

        for(int i = 1;i < n;i++) {
            if(ss[i - 1] + 1 == ss[i] || (ss[i - 1] == 'z' && ss[i] == 'a')) {
                dp[i] += dp[i - 1];
            }
        }

        // 去重
        int[] hash = new int[26];
        for(int i = 0;i < n;i++) {
            hash[ss[i] - 'a'] = Math.max(hash[ss[i] - 'a'],dp[i]);
        }
        // 计数个数
        int sum = 0;
        for(int x : hash) {
            sum += x;
        }
        return sum;
    }
}
